import * as Icons from '@element-plus/icons-vue'

// 图标信息接口
export interface IconInfo {
  name: string
  label: string
  component: any
  category: string
}

// 图标分类映射
const ICON_CATEGORIES = {
  // 基础图标
  basic: ['HomeFilled', 'Document', 'Folder', 'Files', 'FolderOpened'],
  // 用户相关
  user: ['User', 'UserFilled', 'Avatar', 'SwitchButton', 'Lock', 'Unlock'],
  // 数据相关
  data: ['DataAnalysis', 'DataBoard', 'TrendCharts', 'PieChart', 'Histogram'],
  // 操作相关
  action: ['Plus', 'Minus', 'Edit', 'Delete', 'Search', 'Refresh', 'Download', 'Upload'],
  // 导航相关
  navigation: ['ArrowLeft', 'ArrowRight', 'ArrowUp', 'ArrowDown', 'Back', 'Right'],
  // 状态相关
  status: ['SuccessFilled', 'WarningFilled', 'CircleCloseFilled', 'InfoFilled', 'QuestionFilled'],
  // 设置相关
  setting: ['Setting', 'Tools', 'Monitor', 'Operation', 'Management'],
  // 通信相关
  communication: ['Message', 'ChatDotRound', 'Phone', 'Mail', 'Notification'],
  // 媒体相关
  media: ['Picture', 'VideoPlay', 'Microphone', 'Headphone', 'Camera'],
  // 其他
  other: ['Star', 'StarFilled', 'Heart', 'HeartFilled', 'Collection', 'CollectionTag']
}

// 获取所有Element Plus图标
export const getAllIcons = (): IconInfo[] => {
  const icons: IconInfo[] = []
  
  Object.keys(Icons).forEach(iconName => {
    const component = (Icons as any)[iconName]
    if (component && typeof component === 'object') {
      // 根据图标名称确定分类
      const category = getIconCategory(iconName)
      
      icons.push({
        name: iconName,
        label: formatIconLabel(iconName),
        component,
        category
      })
    }
  })
  
  return icons.sort((a, b) => a.label.localeCompare(b.label))
}

// 根据图标名称确定分类
const getIconCategory = (iconName: string): string => {
  for (const [category, iconList] of Object.entries(ICON_CATEGORIES)) {
    if (iconList.includes(iconName)) {
      return category
    }
  }
  return 'other'
}

// 格式化图标标签（将驼峰命名转换为中文）
const formatIconLabel = (iconName: string): string => {
  const labelMap: Record<string, string> = {
    // 基础图标
    'HomeFilled': '首页',
    'Document': '文档',
    'Folder': '文件夹',
    'Files': '文件',
    'FolderOpened': '打开文件夹',
    
    // 用户相关
    'User': '用户',
    'UserFilled': '用户(填充)',
    'Avatar': '头像',
    'SwitchButton': '切换按钮',
    'Lock': '锁定',
    'Unlock': '解锁',
    
    // 数据相关
    'DataAnalysis': '数据分析',
    'DataBoard': '数据面板',
    'TrendCharts': '趋势图',
    'PieChart': '饼图',
    'Histogram': '柱状图',
    
    // 操作相关
    'Plus': '添加',
    'Minus': '减少',
    'Edit': '编辑',
    'Delete': '删除',
    'Search': '搜索',
    'Refresh': '刷新',
    'Download': '下载',
    'Upload': '上传',
    
    // 导航相关
    'ArrowLeft': '左箭头',
    'ArrowRight': '右箭头',
    'ArrowUp': '上箭头',
    'ArrowDown': '下箭头',
    'Back': '返回',
    'Right': '右',
    
    // 状态相关
    'SuccessFilled': '成功',
    'WarningFilled': '警告',
    'CircleCloseFilled': '关闭',
    'InfoFilled': '信息',
    'QuestionFilled': '问题',
    
    // 设置相关
    'Setting': '设置',
    'Tools': '工具',
    'Monitor': '监控',
    'Operation': '操作',
    'Management': '管理',
    
    // 通信相关
    'Message': '消息',
    'ChatDotRound': '聊天',
    'Phone': '电话',
    'Mail': '邮件',
    'Notification': '通知',
    
    // 媒体相关
    'Picture': '图片',
    'VideoPlay': '视频',
    'Microphone': '麦克风',
    'Headphone': '耳机',
    'Camera': '相机',
    
    // 其他
    'Star': '星形',
    'StarFilled': '星形(填充)',
    'Heart': '心形',
    'HeartFilled': '心形(填充)',
    'Collection': '收藏',
    'CollectionTag': '收藏标签'
  }
  
  return labelMap[iconName] || iconName
}

// 根据分类获取图标
export const getIconsByCategory = (category: string): IconInfo[] => {
  return getAllIcons().filter(icon => icon.category === category)
}

// 获取常用图标（用于权限系统）
export const getCommonIcons = (): IconInfo[] => {
  const commonIconNames = [
    'HomeFilled', 'User', 'Setting', 'Document', 'DataAnalysis', 
    'TrendCharts', 'Monitor', 'Lock', 'Tools', 'QuestionFilled',
    'Plus', 'Edit', 'Delete', 'Search', 'Refresh', 'Management',
    'Operation', 'Message', 'Notification', 'Star', 'Heart'
  ]
  
  return getAllIcons().filter(icon => commonIconNames.includes(icon.name))
}

// 根据名称获取图标组件
export const getIconComponent = (iconName: string) => {
  if (!iconName) return Icons.Document
  return (Icons as any)[iconName] || Icons.Document
}

// 检查图标是否存在
export const isIconExists = (iconName: string): boolean => {
  return !!(Icons as any)[iconName]
}

// 获取图标选项（用于下拉选择）
export const getIconOptions = () => {
  return getCommonIcons().map(icon => ({
    label: icon.label,
    value: icon.name
  }))
}

// 获取所有图标选项（用于下拉选择）
export const getAllIconOptions = () => {
  return getAllIcons().map(icon => ({
    label: icon.label,
    value: icon.name
  }))
}

// 按分类获取图标选项
export const getIconOptionsByCategory = () => {
  const categories: Record<string, Array<{ label: string; value: string }>> = {}
  
  Object.keys(ICON_CATEGORIES).forEach(category => {
    categories[category] = getIconsByCategory(category).map(icon => ({
      label: icon.label,
      value: icon.name
    }))
  })
  
  return categories
}
